#include "widget.h"
#include "ui_widget.h"




Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //On définit un fond noir (plus pratique pour l'utilisation et fait moins mal aux yeux)
    QPalette p = QPalette();
    p.setColor(QPalette::Window,Qt::black);

    this->setPalette(p);


    //On rentre les informations pour les paramètres systèmes
    QSettings s;
    //Si le mot de passe n'est pas défini, on le demande.
    QString pass = s.value("pass").toString();

    if(pass == ""){
        while(pass == ""){
            pass = MdpDialog::nouveau(this);
        }
        s.setValue("pass",pass);
    }

    tactile = s.value("tactile").toString() == "OUI" ? true : false;
    gestionStocks = s.value("gestionstock").toString() == "OUI" ? true : false;


    if(tactile){
    //On créer un pavé numérique
        ClavNum *Pad = new ClavNum(false,this);

        ui->verticalLayout->addWidget(Pad);
    }else{
        ui->listWidget->setFocusPolicy(Qt::NoFocus);
    }

    //On ouvre la connexion à la base de donnée
    this->ouvrir_base();
    this->completer_structure(db);

    //Connexion: Chaque fois que l'on modifie la fam's demandé, la liste des prom's possible est remise à jour
    connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(majListProms(QString)));
    //Connexion: Lorsque l'on clique sur une prom's, on ouvre la fenetre de bucquage
    connect(ui->listWidget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(OuvrirBucquage(QListWidgetItem*)));

    //On filtre les évenements d'entré des fam's (pour gérer le clic qui ouvre la page Admin)
    ui->lineEdit->installEventFilter(this);


    majTextEdits();

    //On donne le focus à l'entrée des fam's
    ui->lineEdit->setFocus();

}

Widget::~Widget()
{
    delete ui;
}



void Widget::closeEvent(QCloseEvent *e)
{

    //On demande le mot de passe pour fermer le programme
    QSettings s;
    if(MdpDialog::mdp(this,s.value("pass").toString())){
        this->fermer_base();
        e->accept();
    }else{
        e->ignore();
    }


}

bool Widget::eventFilter(QObject *obj, QEvent *event)
{
    //On verifie que l'évenement soit bien un clic et que le numéro correct soit spécifié
    if(event->type() == QEvent::MouseButtonPress && ui->lineEdit->text() == "400"){
        //On réinitialise le champ fam's
        ui->lineEdit->setText("");
        ui->lineEdit->setFocus();
        ui->lineEdit->setCursorPosition(0);
        //On vérifie le mot de passe
        QSettings s;
        if(MdpDialog::mdp(this,s.value("pass").toString())){
            //On créer la fenetre d'administration et on l'ouvre
            AdminWidget *a = new AdminWidget();
            a->setWindowState(Qt::WindowFullScreen);
            a->setAttribute(Qt::WA_DeleteOnClose);
            a->setWindowModality(Qt::ApplicationModal);
            connect(a,SIGNAL(changementAccueil()),this,SLOT(majTextEdits()));
            connect(a,SIGNAL(reconnecterBase()),this,SLOT(ouvrir_base()));
            a->show();
        }
        return true;
    }else if(event->type() == QEvent::KeyPress){
        if(!tactile){
            QKeyEvent *e = static_cast<QKeyEvent *>(event);
            int k = e->key() - Qt::Key_F1;
            if(ui->listWidget->item(k) != 0){
                OuvrirBucquage(ui->listWidget->item(k));
            }


        }
        QKeyEvent *e = static_cast<QKeyEvent *>(event);
        if((e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return)&& ui->lineEdit->text() == "999" ){
            ouvrir_base();
            majTextEdits();
            QMessageBox::information(this,"Reset","La base a été reconnectée.");
            ui->lineEdit->setText("");
            ui->lineEdit->setFocus();
            ui->lineEdit->setCursorPosition(0);
        }

        //Si l'évenement ne correspond pas (ou que le numéro est erroné) on laisse l'objet le traiter
        return QObject::eventFilter(obj,event);
    }else{
        //Si l'évenement ne correspond pas (ou que le numéro est erroné) on laisse l'objet le traiter
        return QObject::eventFilter(obj,event);
    }
}

void Widget::OuvrirBucquage(QListWidgetItem* it)
{

    QString prom = tactile ? it->text() : it->text().split("]-")[1];


    //On créer le pg correspondnat à la fam's et à la prom's demandée (on ne demande pas le mode administrateur)
    Pg *pg = new Pg(ui->lineEdit->text().toInt(),prom);
    //On créer la fenetre de bucquage
    Bucquage *b = new Bucquage(pg);
    b->setWindowState(Qt::WindowFullScreen);
    b->setAttribute(Qt::WA_DeleteOnClose);
    b->setWindowModality(Qt::ApplicationModal);
    connect(b,SIGNAL(termine()),this,SLOT(majTextEdits()));
    b->show();
    //On réinitialise le champ fam's
    ui->lineEdit->setText("");
    ui->lineEdit->setFocus();
    ui->lineEdit->setCursorPosition(0);
}


